package miaofusdk

import (
	"encoding/json"
)

/**
口碑插件.订购
*/

type ServiceMarketOrder struct {
	Id int `json:"id,omitempty,string"`
	//订单编号（用于订单明细回查使用）
	CommodityOrderId string `json:"commodity_order_id,omitempty"`
	//订购时间 2016-01-01 00:00:01
	OrderTime string `json:"order_time,omitempty"`
	//服务名称
	Title string `json:"title,omitempty"`
	//商户名称
	Name string `json:"name,omitempty"`
	//联系人
	Contactor string `json:"contactor,omitempty"`
	//商户PID
	MerchantPid string `json:"merchant_pid,omitempty"`
	//联系电话
	Phone string `json:"phone,omitempty"`
	//门店数量
	OrderItemNum string `json:"order_item_num,omitempty"`
	//总价格 5000.00
	TotalPrice string `json:"total_price,omitempty"`
	//业务分类 排队
	BizType string `json:"biz_type,omitempty"`
	//MERCHANT_ORDED（待服务商接单）
	Status string `json:"status,omitempty"`
	//标准版,试用版
	Specifications string `json:"specifications,omitempty"`
}

type RespServiceMarketOrder struct {
	Response
	Data ServiceMarketOrder `json:"data,omitempty"`
}

type RespServiceMarketOrders struct {
	Response
	Page       int                  `json:"page,string"`
	Rows       int                  `json:"rows,string"`
	TotalCount int                  `json:"total_count,string"`
	TotalPage  int                  `json:"total_page,string"`
	List       []ServiceMarketOrder `json:"list,omitempty,string"`
}

func (s *SrvAliGoodManager) RejectOrder(order_id, reason string) (RespServiceMarketOrder, error) {
	resp := RespServiceMarketOrder{}
	http_request := s.GetPost(s.GetUrl() + "/srvmarket/order_reject")
	http_request.Param("order_id", order_id)
	http_request.Param("reason", reason)
	if v, err := http_request.Bytes(); err != nil {
		return resp, err
	} else if err := json.Unmarshal(v, &resp); err != nil {
		return resp, err
	} else {
		return resp, nil
	}
}

func (s *SrvAliGoodManager) OrderItemConfirm(order_id, shop_id string) (Response, error) {
	resp := Response{}
	http_request := s.GetPost(s.GetUrl() + "/srvmarket/order_item_confirm")
	http_request.Param("order_id", order_id)
	http_request.Param("shop_id", shop_id)
	if v, err := http_request.Bytes(); err != nil {
		return resp, err
	} else if err := json.Unmarshal(v, &resp); err != nil {
		return resp, err
	} else {
		return resp, nil
	}
}

func (s *SrvAliGoodManager) OrderItemComplete(order_id, shop_id string) (Response, error) {
	resp := Response{}
	http_request := s.GetPost(s.GetUrl() + "/srvmarket/order_item_complete")
	http_request.Param("order_id", order_id)
	http_request.Param("shop_id", shop_id)
	if v, err := http_request.Bytes(); err != nil {
		return resp, err
	} else if err := json.Unmarshal(v, &resp); err != nil {
		return resp, err
	} else {
		return resp, nil
	}
}

func (s *SrvAliGoodManager) OrderItemCancel(order_id, shop_id string) (Response, error) {
	resp := Response{}
	http_request := s.GetPost(s.GetUrl() + "/srvmarket/order_item_confirm")
	http_request.Param("order_id", order_id)
	http_request.Param("shop_id", shop_id)
	if v, err := http_request.Bytes(); err != nil {
		return resp, err
	} else if err := json.Unmarshal(v, &resp); err != nil {
		return resp, err
	} else {
		return resp, nil
	}
}

func (s *SrvAliGoodManager) QueryOrder(order_id string) (RespServiceMarketOrder, error) {
	resp := RespServiceMarketOrder{}
	http_request := s.GetPost(s.GetUrl() + "/srvmarket/order_query")
	http_request.Param("order_id", order_id)
	if v, err := http_request.Bytes(); err != nil {
		return resp, err
	} else if err := json.Unmarshal(v, &resp); err != nil {
		return resp, err
	} else {
		return resp, nil
	}
}

type ServiceMarketOrderDetail struct {
	Id int `json:"id,omitempty,string"`
	//订单编号（用于订单明细回查使用）
	CommodityOrderId string `json:"commodity_order_id,omitempty"`
	//订单编号（用于订单明细回查使用）
	CommodityId string `json:"commodity_id,omitempty"`
	//门店创建人(已删除)
	Creator string `json:"creator,omitempty"`
	//订单所属人联系方式（手机或者座机）
	PhoneNo string `json:"phone_no,omitempty"`
	//上架时间
	OnlineTime string `json:"online_time,omitempty"`
	//过期时间
	ExpireDate string `json:"expire_date,omitempty"`
	// TO_DO-未实施,
	// DOING-实施中,
	// TO_CONFIRM-待商户确认,
	// DONE-已完成,
	// MERCHANT_REJECTED-商户已回绝,
	// MERCHANT_CANCELLED-商户已取消,
	// ISV_REJECTED-服务商已回绝,
	// ISV_CANCELLED-服务商已取消
	OrderStatus string `json:"order_status,omitempty"`
	//店铺状态（ONLINE--已上架 OFFLINE--未上架 AVAILABLE--已开通 INIT--未开通 EXPIRED--已过期)
	ShopStatus string `json:"shop_status,omitempty"`

	//商户PID
	MerchantPid string `json:"merchant_pid,omitempty"`
	//商户商户名称
	MerchantName string `json:"merchant_name,omitempty"`
	//品牌名称
	BrandName string `json:"brand_name,omitempty"`
	//订单联系人
	Contacts string `json:"contacts,omitempty"`
	//店铺名称
	ShopName string `json:"shop_name,omitempty"`
	//店铺ID
	ShopId string `json:"shop_id,omitempty"`
	//店铺品类
	Category string `json:"category,omitempty"`
	//店铺所在的省份
	Province string `json:"province,omitempty"`
	//店铺所在的市
	City string `json:"city,omitempty"`
	//店铺所在具体位置
	Address string `json:"address,omitempty"`
}

type RespServiceMarketOrderDetail struct {
	Response
	Data ServiceMarketOrderDetail `json:"data,omitempty"`
}

type RespServiceMarketOrderDetails struct {
	Response
	Page       int                        `json:"page,string"`
	Rows       int                        `json:"rows,string"`
	TotalCount int                        `json:"total_count,string"`
	TotalPage  int                        `json:"total_page,string"`
	List       []ServiceMarketOrderDetail `json:"list,omitempty,string"`
}

//检查是否订购了.扫码点菜插件
func (s *SrvAliGoodManager) Ordered(user_id, biz_type string) (Response, error) {
	resp := Response{}
	http_request := s.GetPost(s.GetUrl() + "/srvmarket/ordered")
	http_request.Param("user_id", user_id)
	http_request.Param("biz_type", biz_type)
	if v, err := http_request.Bytes(); err != nil {
		return resp, err
	} else if err := json.Unmarshal(v, &resp); err != nil {
		return resp, err
	} else {
		return resp, nil
	}
}

/**
店铺操作-----桌码操作
*/
func (s *SrvAliGoodManager) ShopActionTableAction(user_id, shop_id, action_detail, action_type string) (Response, error) {
	resp := Response{}
	http_request := s.GetPost(s.GetUrl() + "/order/shop_action_table")
	http_request.Param("user_id", user_id)
	http_request.Param("shop_id", shop_id)
	http_request.Param("action_detail", action_detail)
	http_request.Param("action_type", action_type)
	if v, err := http_request.Bytes(); err != nil {
		return resp, err
	} else if err := json.Unmarshal(v, &resp); err != nil {
		return resp, err
	} else {
		return resp, nil
	}
}

//用户行为 服务卡
func (s *SrvAliGoodManager) UserActionServerCard(user_id, shop_id, merchant_pid, action_detail string) (Response, error) {
	resp := Response{}
	http_request := s.GetPost(s.GetUrl() + "/order/user_action_service_card")
	http_request.Param("user_id", user_id)
	http_request.Param("shop_id", shop_id)
	http_request.Param("action_detail", action_detail)
	http_request.Param("merchant_pid", merchant_pid)
	http_request.Param("action_type", "service_card")
	if v, err := http_request.Bytes(); err != nil {
		return resp, err
	} else if err := json.Unmarshal(v, &resp); err != nil {
		return resp, err
	} else {
		return resp, nil
	}
}

//用户行为 订单
func (s *SrvAliGoodManager) UserActionOrderPan(user_id, shop_id, merchant_pid, action_detail string) (Response, error) {
	resp := Response{}
	http_request := s.GetPost(s.GetUrl() + "/order/user_action_order_pan")
	http_request.Param("user_id", user_id)
	http_request.Param("shop_id", shop_id)
	http_request.Param("action_detail", action_detail)
	http_request.Param("merchant_pid", merchant_pid)
	http_request.Param("action_type", "order_pan")
	if v, err := http_request.Bytes(); err != nil {
		return resp, err
	} else if err := json.Unmarshal(v, &resp); err != nil {
		return resp, err
	} else {
		return resp, nil
	}
}

type AliItemBean struct {
	Id int `json:"id,omitempty"`
	//用户 id....
	UserId string `json:"user_id,omitempty"`
	////口碑体系内部商品的唯一标识 ，后续的增删改查接口都使用 该ID作为主键
	ItemId string `json:"item_id,omitempty"`
	//商品类型为交易凭证类型 :TRADE_VOUCHER
	ItemType string `json:"item_type,omitempty"`
	//商品名称，请勿超过20汉字 ，40个字符
	Subject string `json:"subject,omitempty"`
	//商品顺序权重，必须是整数 ，不传默认为0，权重数值越 大排序越靠前
	Weight int `json:"weight,omitempty"`
	//标准商品:FIX;非标准商品 :FLOAT
	PriceMode string `json:"price_mode,omitempty"`
	//商品库存数量，标准商品必填 ;非标准商品不需要填写，不 填写则默认为:99999999
	Inventory int `json:"inventory,omitempty"`
	//商品描述，列表类型，最多 10项，每一项的key，value的 描述见下面两行
	Descriptions string `json:"descriptions,omitempty"`
	//上架门店id列表，即传入一个 或多个shop_id。多个ID则以 英文,分隔
	ShopIds string `json:"shop_ids,omitempty"`
	//商品生效时间，商品状态有效 并且到达生效时间后才可在客 户端(消费者端)展示出来 ，
	// 如果商品生效时间小于当前 时间，则立即生效。 说明:商品的生效时间不能早 于创建当天的0点
	GmtStart string `json:"gmt_start,omitempty"`
	//商品首图。支持 bmp,png,jpeg,jpg,gif格式的 图片，
	// 建议宽高比16:9，
	// 建议 宽高:1242*698px
	// 图片大小 ≤5M。图片大小超过5M,接口 会报错。
	// 若图片尺寸不对，口碑服务器自身不会做压缩，
	// 但 是口碑把这些图片放到客户端上展现时，自己会做性能优化 (等比缩放，以图片中心为基 准裁剪)。
	Cover string `json:"cover,omitempty"`
	//商品详情图。尺寸大小与 cover一致，最多5张，以英文逗号分隔
	// 端上展现时，自己会做性能优 化(等比缩放，以图片中心为 基准裁剪)
	PictureDetails string `json:"picture_details,omitempty"`
	//标准商品为现价,必填。非标准 商品为最小价格(非标商品为 xx元起)必填。
	// 价格单位为元 。如果现价与原价相等时，则 会以原价售卖，并且客户端只 展示一个价格(原价
	Price string `json:"price,omitempty"`
	//标准商品为原价，必填。非标准商品请勿填写，填写无效。价格单位为元
	OriginalPrice string `json:"original_price,omitempty"`
	//非标准商品详情页url，用户通过此url跳转到非标准商品的商 品详情页，非标准商品必填
	ItemDetailUrl string `json:"item_detail_url,omitempty"`
	//口碑商品所属的后台类目 id，ISV可通过开放接口
	// koubei.item.category.children.batchquery来获得后台类 目树，并选择叶子类目，作为 该值传入
	CategoryId string `json:"category_id,omitempty"`
	//购买有效期:商品自购买起多长时间内有效，
	// 取值范围 7- 360，单位天。
	// 举例，如果是 7的话，是到第七天晚上 23:59:59失效。
	// 商品购买后 ，没有在有效期内核销，则自 动退款给用户。
	// 举例:买了一 个高级造型师洗剪吹的商品 ，有效期一个月，如果一个月 之后，用户没有使用商品来进 行洗剪吹的服务，则自动退款 给用户。
	ValidityPeriod string `json:"validity_period,omitempty"`
	//表示是否支持预定，支持 “T”, 不支持“F”
	SupportBook string `json:"support_book,omitempty"`
	//TradeVoucherItemTemplate struct {
	//	//购买须知，列表类型，最多 10项
	//	BuyerNotes []struct {
	//		//描述标题，不得超过15个中文 字符
	//		Title string `json:"title,omitempty"`
	//		//标题下的描述列表，列表类型 ，每项不得为空,最多10项 ，总长度不能超过2600个中文 字符
	//		Details []string `json:"details,omitempty"`
	//	} `json:"buyer_notes,omitempty"`

	//} `json:"trade_voucher_item_template,omitempty"`

	//该商品当前的状态，共有5个 状态:INIT(初始状态 )EFFECTIVE(生效 )PAUSE(暂停)FREEZE(冻 结)INVALID(失效);详见状 态变更图
	ItemStatus string `json:"item_status,omitempty"`

	//可以核销的起始时间
	TicketStartTime string `json:"ticket_start_time,omitempty"`
	//可以核销的结束时间
	TicketEndTime string `json:"ticket_end_time,omitempty"`
	//不可以核销的时间段
	UnTicketStartTimes string `json:"un_ticket_start_times,omitempty"`
	UnTicketEndTimes   string `json:"un_ticket_end_times,omitempty"`
	//不可核销的周
	UnTicketWeekday string `json:"un_ticket_weekday,omitempty"`
	SoldNum         int    `json:"sold_num"`
	ShopName        string `json:"shop_name,omitempty"`
}

type RespAliItem struct {
	Response
	Data AliItemBean `json:"data,omitempty"`
}

type RespAliItems struct {
	Response
	Page       int           `json:"page,string"`
	Rows       int           `json:"rows,string"`
	TotalCount int           `json:"total_count,string"`
	TotalPage  int           `json:"total_page,string"`
	List       []AliItemBean `json:"list,omitempty,string"`
}

type ServiceOrderStats struct {
	Id         int    `json:"id"`
	OrderDay   string `json:"order_day"`
	PluginName string `json:"plugin_name"`
	OrderNum   int    `json:"order_num"`
	StoreNum   int    `json:"store_num"`
	StartTime  string `json:"start_time"`
	EndTime    string `json:"end_time"`
}

type RespServiceOrderStats struct {
	Response
	Data ServiceOrderStats `json:"data,omitempty"`
}

type RespServiceOrderStatss struct {
	Response
	Page       int                 `json:"page,string"`
	Rows       int                 `json:"rows,string"`
	TotalCount int                 `json:"total_count,string"`
	TotalPage  int                 `json:"total_page,string"`
	List       []ServiceOrderStats `json:"list,omitempty,string"`
}

//更新一个关系
func (s *SrvAliGoodManager) UpdateOutRelation(shop_id, store_code, store_name, user_id string) (string, error) {
	http_request := s.GetPost(s.GetUrl() + "/srvmarket/update_out_relation")
	http_request.Param("store_code", store_code)
	http_request.Param("shop_id", shop_id)
	http_request.Param("store_name", store_name)
	http_request.Param("user_id", user_id)
	return http_request.String()
}
